<?php
/*
Description: This plgin allow to create new post type scheda_attivita
Version: 1.0
Author: Carmine Ricco - Luca De Cristofano
Author URI: #
License: GPL2
*/

$pluginDir = basename(dirname(__FILE__));
$pluginPath	= WP_PLUGIN_DIR . '/' . $pluginDir;

require_once($pluginPath . "/wp-formazione_includes.php");	


wpf_scheda_attivita_hooks();

// fissa gli hook
function wpf_scheda_attivita_hooks() {
    // creo il plugin ed i relativi menu
    register_activation_hook(__FILE__, 'wpf_scheda_attivita_rewrite_flush');  // serve per i permalink
    add_action('init', 'wpf_scheda_attivita_init'); // quando inizializzo la pagina
        
     
    add_filter('manage_edit-wpf_scheda_attivita_columns','wpf_scheda_attivita_list_column_header'); // aggiunge la colonna "azienda" alla lista dei fascicoli
    add_action('manage_wpf_scheda_attivita_posts_custom_column',  'wpf_scheda_attivita_list_column_row', 10, 2 ); // riempie la colonna azienda alla lista dei fascicoli
    add_filter('manage_edit-wpf_scheda_attivita_sortable_columns', 'wpf_scheda_attivita_list_sort_columns' ); // rende ordinabile per una colonna
    
    add_filter('wpf_scheda_attivita_field', 'wpf_scheda_attivita_render_field', 10, 2);
    
    // salvo i dati dei vari box creati
    //add_action( 'save_post', 'wpf_scheda_attivita_accesso_save' ); // salva i dati di accesso
}


// inizializza quello che serve
function wpf_scheda_attivita_init() {

	// creazione del posttype
	  $labels = array(
	    'name' => _x('Schede attività', 'Individuano una tipologia di attività da svolgere durante il corso'),
	    'singular_name' => _x('Scheda attività', 'Nome singolare della Scheda attività'),
	    'add_new' => _x('Aggiungi nuova', 'wpf_scheda_attivita'),
	    'add_new_item' => __('Nuova Scheda attività'),
	    'edit_item' => __('Modifica Scheda attività'),
	    'new_item' => __('Nuovo Scheda attività'),
	    'all_items' => __('Tutte le Schede attività'),
	    'view_item' => __('Visualizza questa Scheda attività'),
	    'search_items' => __('Cerca una Scheda attività'),
	    'not_found' =>  __('Nessuna Scheda attività trovata'),
	    'not_found_in_trash' => __('Non ci sono Schede attività nel cestino'), 
	    'parent_item_colon' => '',
	    'menu_name' => 'Schede attività'
	  );	
	  
	  $args = array(
	    'labels' => $labels,
	    'public' => true,
	    'publicly_queryable' => true,
	    'show_ui' => true, 
	    'show_in_menu' => 'edit.php?post_type=wpf_modulo', 
	    'query_var' => true,
	    'rewrite' => array('slug' => 'scheda_attivita'),
	    'capability_type' => array('modulo','moduli'),
            'map_meta_cap' => true,
            'has_archive' => true, 
	    'hierarchical' => true,
	    'menu_position' => null,
	    'supports' => array('title' ),
	    
	  );


	register_post_type('wpf_scheda_attivita',$args);	
	
	  // creo la tassonomia per questo customtype
	  $labels = array(
	    'name' => _x( 'Tipologia', 'taxonomy general name' ),
	    'singular_name' => _x( 'Tipologia', 'taxonomy singular name' ),
	    'search_items' =>  __( 'Cerca le Tipologie' ),
	    'all_items' => __( 'Tutte le Tipologie' ),
	    'parent_item' => __( 'Tipologia superiore' ),
	    'parent_item_colon' => __( 'Tipologia Superiore:' ),
	    'edit_item' => __( 'Modifica Tipologia' ), 
	    'update_item' => __( 'Aggiorna Tipologia' ),
	    'add_new_item' => __( 'Aggiungi Nuova Tipologia' ),
	    'new_item_name' => __( 'Nome Tipologia' ),
	    'menu_name' => __( 'Tipologia' ),
	  ); 	
	
	  register_taxonomy('tipoattivita', array('wpf_scheda_attivita'), array(
	    'hierarchical' => true,
	    'labels' => $labels,
	    'show_ui' => true,
	    'query_var' => true,
	    'rewrite' => array( 'slug' => 'tipo' ),
	  ));  
        
  
  // @TODO la query 'contenuti_tutti' non esiste
  $contenuti_list = get_posts(wpf_get_query('contenuti_tutti'));
  $contenuti = '';
  foreach ($contenuti_list as $contenuto) $contenuti .= $contenuto->ID.':'.$contenuto->post_title.',';

  
  
  $ena_values = __("On module accessible", WPF_DOMAIN ).","
  				.__("When level is ...", WPF_DOMAIN ).","
  				.__("When user have ...", WPF_DOMAIN ).","
  				.__("Every ... days", WPF_DOMAIN ).","
  				.__("Every ... of the month", WPF_DOMAIN ).","
  				.__("Time interval", WPF_DOMAIN ).","
  				.__("After ... days from the first activation", WPF_DOMAIN ).","
  				.__("After password", WPF_DOMAIN );

  $mod_values = __("Read only", WPF_DOMAIN ).","
  				.__("Single entry", WPF_DOMAIN ).","
  				.__("Editable", WPF_DOMAIN );
  				
  $acc_values = __("Single access", WPF_DOMAIN ).","
  				.__("Multiple access until confirmation", WPF_DOMAIN ).","
  				.__("Free access", WPF_DOMAIN ).","
  				.__("Multiple access", WPF_DOMAIN );
  				
  $com_values = __("Never", WPF_DOMAIN ).","
  				.__("Chosen by the teacher", WPF_DOMAIN ).","
  				.__("Choice of the student", WPF_DOMAIN ).","
  				.__("Chosen by the responsable", WPF_DOMAIN ).","
  				.__("After the maximum time", WPF_DOMAIN ).","
  				.__("After the end of the module", WPF_DOMAIN ).","
  				.__("After overcoming of total score", WPF_DOMAIN ).","
  				.__("After overcoming of partial score", WPF_DOMAIN ).","
  				.__("After the minimum number of responses", WPF_DOMAIN );
  				
   
  
  $form_fields = array(
        'cont_assoc' => array(
                'type' => 'select',
                'values' => $contenuti,
                'description' => __("Associated contents", WPF_DOMAIN ),
                'howto' => __("Inserisci qui il contenuto associato a questa attivit&agrave; (nel caso sia richiesto, come ad esempio un test o un form di iscrizione).", WPF_DOMAIN )
            ),
        'limited' => array(
                'type' => 'select&text',
                'description' => __("Limitata", WPF_DOMAIN ),
                'values' => $ena_values,
                'option' => 5, // ha anche admission_option
                'closer' => 'days',
                'howto' => __("Indica se è accessibile all'utente", WPF_DOMAIN )
            ),
        'enable' => array(
                'type' => 'select&text',
                'description' => __("Abilitata", WPF_DOMAIN ),
                'values' => $ena_values,
                'option' => 5, // ha anche admission_option
                'closer' => 'days',
                'howto' => __("Indica quando l'attivit&agrave; deve essere attivata/visibile.", WPF_DOMAIN )
            ),
        'expiry' => array(
                'type' => 'select&text',
                'description' => __("Termine", WPF_DOMAIN ),
                'values' => $ena_values,
                'option' => 5,
                'closer' => 'day',
                'howto' => __("Indica quando l'attivit&agrave; non è più visibile", WPF_DOMAIN )
            ),
        'access' => array(
                'type' => 'select',
                'description' => __("Accesso", WPF_DOMAIN ),
                'values' => $acc_values,
                'howto' => __("Indica come può essere effettuato l'accesso alla l'attivit&agrave;", WPF_DOMAIN )
            ),
        'completion' => array(
                'type' => 'select&text',
                'description' => __("Campletamento", WPF_DOMAIN ),
                'values' => $com_values,
                'option' => 5,
                'closer' => 'day',
                'howto' => __("Indica quando l'attivit&agrave; può essere considerata completata", WPF_DOMAIN )
            )
      );
        
    register_post_box('wpf_scheda_attivita', 'accesso_attivita', 'Modalit&agrave; di accesso alla attivit&agrave;', 'normal', 'core', $form_fields);
    
 $form_fields = array(
        'reset_answers' => array(
                'type' => 'checkbox',
                'description' => __("Riazzera le risposte", WPF_DOMAIN ),
                'howto' => __("Abilita questa funzionalità se vuoi che ad ogni accesso le risposte siano riazzerate", WPF_DOMAIN )
            ),
        'reset_counters' => array(
                'type' => 'checkbox',
                'description' => __("Riazzera i contatore", WPF_DOMAIN ),
                'howto' => __("Abilita questa funzionalità se vuoi che ad ogni accesso i contatori siano riazzerati.", WPF_DOMAIN )
            ),
        'interaction' => array(
                'type' => 'select',
                'description' => __("Interazione dell\'utente", WPF_DOMAIN ),
                'values' => 'Nessuna, testo, risposta multipla, documento da caricare', 
                'howto' => __("Indica in che modo l'utente può interagire con l'attività", WPF_DOMAIN )
            ),
        'score' => array(
                'type' => 'select',
                'description' => __("Calcolo punteggio", WPF_DOMAIN ),
                'values' => 'Non da punteggio, Conta le risposte, Somma le risposte',
                'howto' => __("Indica come calcolare il punteggio di questa attività (considera che il contenuto associato di questa attività alcuni campi 'score' che vanno valutati", WPF_DOMAIN )
            ),
        'useful_score' => array(
                'type' => 'checkbox',
                'description' => __("Punteggio utile", WPF_DOMAIN ),
                'howto' => __("Seleziona questa opzione se vuoi che questo punteggio contribuisca al punteggio totale del modulo.", WPF_DOMAIN )
            ),
        'view' => array(
                'type' => 'select',
                'description' => __("Visualizza i punteggi", WPF_DOMAIN ),
                'values' => 'Nessuna visualizzazione, Mostra il punteggio totale, Mostra i dettagli delle risposte, rappresenta i risultati in un grafico  ',
                'howto' => __("Indica come visualizzare i punteggi", WPF_DOMAIN )
            ),
        'group' => array(
                'type' => 'select',
                'description' => __("Raggruppa i risultati", WPF_DOMAIN ),
                'values' => 'Non ragruppare, ragruppa per corso, ragruppa per studente, ragruppa per progetto, ragruppa per docente',
                'howto' => __("Indica come ragruppare i punteggi di questa attività nel modulo", WPF_DOMAIN )
            )
      );
        
   register_post_box('wpf_scheda_attivita', 'punteggio_attivita', 'Modalit&agrave; di valutazione del punteggio', 'normal', 'core', $form_fields);
  
   
    $moduli_list = get_posts(wpf_get_query('moduli_approvati'));
    $moduli = '';
    foreach ($moduli_list as $modulo) $moduli .= $modulo->ID.':'.$modulo->post_title.',';
    $moduli = trim($moduli,',');
    
        $form_fields = array(
		'modulo' => array(
				 'type' => 'select',
				 'description'=>__("Modulo", WPF_DOMAIN ),
                                 'values' => $moduli,
				 'howto' => __("Il modulo in cui questa attività viene svolta", WPF_DOMAIN ),
                                 )
	);

        //@TODO va controllato il "save" perchè devo aggiornare il post_parent
        register_post_box('wpf_scheda_attivita', 'parent_attivita', 'Modulo', 'normal', 'core', $form_fields);
        
  
}

// serve per gestire i permalink
function wpf_scheda_attivita_rewrite_flush() {
  wpf_scheda_attivita_init();
  flush_rewrite_rules();
}




// aggiunge il contenuto della colonna nella tabella
function wpf_scheda_attivita_list_column_row( $column_name, $id ) {
global $post;
    // verifico quale colonna sto riempiendo
    if ( $column_name == 'progetto' )   echo get_post_meta($id,'progetto',true);
	if ( $column_name == 'macrovoce' ) {
	        $macrovoce_terms = wp_get_object_terms($post->ID, 'macrovoce');
	        if(!empty($macrovoce_terms)){
	            if(!is_wp_error( $macrovoce_terms )){
	                foreach($macrovoce_terms as $term){
	                    echo '<a href="'.get_term_link($term->slug, 'macrovoce').'">'.$term->name.'</a>, '; 
	                }
	            }
	        }
	    }
    //if ( $column_name == 'parent' )         echo $post->post_title.'['.get_post_meta($post->post_parent,'organization',true).']';	
}

// aggiunge le colonne della tabella
function wpf_scheda_attivita_list_column_header( $cols ) {
    $newcols['cb'] = $cols['cb']; // <input type="checkbox"/>
    $newcols['title'] = 'Titolo';
    $newcols['progetto'] = 'progetto';
    $newcols['macrovoce'] = 'macrovoce';
    
    foreach ($cols as $k => $v) $newcols[$k] = $v;
    return $newcols;
}

// indica che la colonna è ordinabile
function wpf_scheda_attivita_list_sort_columns($cols) {	
	$cols['progetto'] = 'progetto';  // adesso la tabella è ordinabile per indirizzo
	$cols['macrovoce'] = 'macrovoce'; 
	return $cols;
}

function wpf_scheda_attivita_render_field($field, $field_id)
{
    global $post;	
    
        if ($field_id=='modulo') 
                if ($post->post_parent!=0) $field['readonly']=true;
        
	$fields = array(
			'modulo',
			'cont_assoc',
			'limited',
			'enabled',
			'enabled_opt',
			'expiry',
			'expiry_opt',
			'modify',
			'access',
			'completion',
			'completion_opt',
			'reset_counters',
			'cont_assoc',
			'interaction',
			'score_calculation',
			'us_score',
			'res_view',
			'res_group'
	);

        /*
    $mod = get_post_meta($post->ID,'modulo',true);  
  $lim = get_post_meta($post->ID,'limited',true);
  $ena = get_post_meta($post->ID,'enabled',true);
  $exp = get_post_meta($post->ID,'expiry',true);  				
  $ena_opt = get_post_meta($post->ID,'enabled_opt',true);
  $exp_opt = get_post_meta($post->ID,'expiry_opt',true);  
  $mod = get_post_meta($post->ID,'modify',true);
  $acc = get_post_meta($post->ID,'access',true);
  $com = get_post_meta($post->ID,'completion',true);
  $com_opt = get_post_meta($post->ID,'completion_opt',true);
  $cont_assoc = get_post_meta($post->ID,'cont_assoc',true);
*/
        
        
        
	switch ($post->post_status)
	{
        case 'pending':
        case 'publish':
        case 'closed':
            if (in_array($field_id, $fields))
			{
				$field['readonly'] = true;
			}
        	break;
    }
	
    return $field;
}
?>